﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls;
using Telerik.WinControls.UI;
using System.IO;
using System.Text.RegularExpressions;

namespace QuanLyNhapXuat.Presentation.WinForm
{
    public partial class frm_QuanLiChiTieu : Telerik.WinControls.UI.RadForm
    {
        private static frm_QuanLiChiTieu doituong = null;
        public static frm_QuanLiChiTieu TaoDoiTuong()
        {
            if (doituong == null)
                doituong = new frm_QuanLiChiTieu();
            return doituong;
        }
        public frm_QuanLiChiTieu()
        {
            InitializeComponent();
        }
        //them service chi phi
        SR_ChiPhi.WS_ChiPhiSoapClient sr_cp = new QuanLyNhapXuat.SR_ChiPhi.WS_ChiPhiSoapClient();
        //them service so thu chi
        SR_SoThuChi.WS_SoThuChiSoapClient sr_stc = new QuanLyNhapXuat.SR_SoThuChi.WS_SoThuChiSoapClient();
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        private bool kiemtra = false;
        private string macp = "";
        private DataTable dt_tam = new DataTable();
        private void frm_QuanLiChiTieu_Load(object sender, EventArgs e)
        {

            //load chi phi vao tree view
            ds.ReadXml(new StringReader(sr_cp.layds()));
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                TreeView_LoaiChiPhi.Nodes[0].Nodes.Add(ds.Tables[0].Rows[i][1].ToString());
                TreeView_LoaiChiPhi.Nodes[0].Nodes[i].CheckType = Telerik.WinControls.UI.CheckType.RadioButton;
            }
            //neu co du lieu trong dt_thu thi do vao gridview
            if (FormMain.dt_thu.Rows.Count != 0)
            {
                gridview_QuanLiChiPhi.DataSource = FormMain.dt_thu;
                kiemtra = true;
            }
        }

        private void btn_Dong_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void TreeView_LoaiChiPhi_SelectedNodeChanged(object sender, Telerik.WinControls.UI.RadTreeViewEventArgs e)
        {
            try
            {
                DataSet tam = new DataSet();
                string cautruyvan = "select macp from chiphi where tencp=N'" + e.Node.Value.ToString() + "'";
                tam.ReadXml(new StringReader(sr_cp.selectquery(cautruyvan)));
                macp = tam.Tables[0].Rows[0][0].ToString();
            }
            catch (Exception ex)
            {
            }
        }

        private void tbn_ThemMoi_Click(object sender, EventArgs e)
        {
            try
            {
                if (txt_TenChiPhi.Text.Length == 0)
                {
                    MessageBox.Show("Hãy nhập tên chi phí bạn muốn thêm");
                    txt_TenChiPhi.Focus();
                }
                else
                {
                    TreeView_LoaiChiPhi.Nodes[0].Nodes.Add(txt_TenChiPhi.Text);
                    TreeView_LoaiChiPhi.Nodes[0].LastNode.CheckType = Telerik.WinControls.UI.CheckType.RadioButton;
                    string macp_tam = xulyma();
                    sr_cp.them(macp_tam, txt_TenChiPhi.Text);
                    txt_TenChiPhi.Text = "";                    
                }
            }
            catch (Exception ex)
            {
            }
        }

        private string xulyma()
        {
            string ma="";
            DataSet cp_tam = new DataSet();
            cp_tam.ReadXml(new StringReader(sr_cp.selectquery("select top 1 macp from chiphi order by macp desc")));
            string tam=cp_tam.Tables[0].Rows[0][0].ToString();
            int so=int.Parse(tam.Substring(2,8).ToString())+1;
            ma="CP"+so.ToString("00000000");
            return ma;
        }
        private int index=0;
        private void btn_XacNhan_Click(object sender, EventArgs e)
        {
            try
            {
                if (TreeView_LoaiChiPhi.SelectedNode == null)
                {
                    MessageBox.Show("Bạn hãy chọn tên chi phí !!!");
                }
                else if (txt_DienGiai.Text.Length == 0)
                {
                    MessageBox.Show("Bạn hãy thêm vào mục diễn giải !!!");
                }
                else if (txt_Mask_SoTien.Text.ToString() == "0")
                {
                    MessageBox.Show("Bạn hãy điền vào số tiền đã chi !!!");
                }
                else if (kiemtraloi == true)
                {
                    MessageBox.Show("Dữ liệu của bạn còn lỗi. Xin hãy kiểm tra lại!!!");
                }
                else
                {
                    if (gridview_QuanLiChiPhi.RowCount != 0)
                        index = gridview_QuanLiChiPhi.RowCount;
                    else
                    {
                        index = 0;
                    }
                    string tencp = TreeView_LoaiChiPhi.SelectedNode.Value.ToString();
                    DateTime ngaychi = dateTP_NgayChiTien.Value;
                    string diengiai = txt_DienGiai.Text;
                    string tien = txt_Mask_SoTien.Value.ToString();
                    float sotien = float.Parse(tien.Replace(",", "").ToString());
                    //them thong tin vao grid view
                    gridview_QuanLiChiPhi.Rows.AddNew();
                    gridview_QuanLiChiPhi.Rows[index].Cells["ngaychi"].Value = ngaychi.ToShortDateString();
                    gridview_QuanLiChiPhi.Rows[index].Cells["tencp"].Value = tencp;
                    gridview_QuanLiChiPhi.Rows[index].Cells["diengiai"].Value = diengiai;
                    gridview_QuanLiChiPhi.Rows[index].Cells["sotien"].Value = sotien.ToString();
                    //them vao bang tam
                    if (kiemtra == false)
                    {
                        DataRow row = FormMain.dt_thu.NewRow();
                        FormMain.dt_thu.Rows.Add(row);
                        FormMain.dt_thu.Rows[index]["ngaychi"] = ngaychi.ToShortDateString();
                        FormMain.dt_thu.Rows[index]["tencp"] = tencp;
                        FormMain.dt_thu.Rows[index]["diengiai"] = diengiai;
                        FormMain.dt_thu.Rows[index]["sotien"] = sotien.ToString();
                    }
                    index++;
                    txt_DienGiai.Text = "";
                    txt_Mask_SoTien.Text = "0";
                }
            }
            catch (Exception ex)
            { }
        }

        private void btn_Xoa_Click(object sender, EventArgs e)
        {

            if (gridview_QuanLiChiPhi.CurrentRow.Index == -1)
                MessageBox.Show("Bạn hãy chọn chi phí muốn xóa !!!");
            else
            {
                gridview_QuanLiChiPhi.CurrentRow.Delete();
                index--;
            }
        }

        private void btn_Luu_Click(object sender, EventArgs e)
        {
            if (gridview_QuanLiChiPhi.RowCount == 0)
            {
                MessageBox.Show("Không có thông tin chi phí để lưu !!!");
            }
            else if(loi==true)
            {
                MessageBox.Show("Dữ liệu của bạn bị lỗi. Xin hãy kiểm tra lại !!!");
            }
            else
            {
                string machungtu = xulymact();
                DataSet tam = new DataSet();
                string macp_tam = "";
                if (gridview_QuanLiChiPhi.Rows.Count > 0)
                {
                    for (int i = 0; i < gridview_QuanLiChiPhi.Rows.Count; i++)
                    {
                        try
                        {
                            tam.ReadXml(new StringReader(sr_cp.selectquery("select macp from chiphi where tencp=N'" + gridview_QuanLiChiPhi.Rows[i].Cells["tencp"].Value.ToString() + "'")));
                            macp_tam = tam.Tables[0].Rows[0][0].ToString();
                            string diengiai = gridview_QuanLiChiPhi.Rows[i].Cells["diengiai"].Value.ToString();
                            DateTime ngaychi = DateTime.Parse(gridview_QuanLiChiPhi.Rows[i].Cells["ngaychi"].Value.ToString());
                            float sotien = float.Parse(gridview_QuanLiChiPhi.Rows[i].Cells["sotien"].Value.ToString());
                            sr_stc.Them(machungtu, macp_tam, diengiai, ngaychi, sotien);                            
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                    FormMain.dt_thu.Clear();
                    MessageBox.Show("Thông tin thu chi đã được lưu thành công !!!");
                }
                gridview_QuanLiChiPhi.Rows.Clear();
                index = 0;
            }
        }

        private string xulymact()
        {
            string mact = "";
            DataSet tam = new DataSet();
            string mau="CT"+DateTime.Now.Day.ToString("00")+DateTime.Now.Month.ToString("00")+DateTime.Now.Year.ToString();
            tam.ReadXml(new StringReader(sr_stc.SelectSQL("select top 1 sochungtu from sothuchi where sochungtu like '" + mau + "%' order by sochungtu desc")));
            if (tam.Tables.Count == 0)
                mact = mau + "00001";
            else
            {
                string temp = tam.Tables[0].Rows[0][0].ToString();
                int so = int.Parse(temp.Substring(10, 5).ToString()) + 1;
                mact = mau + so.ToString("00000");
            }
            return mact;
        }

        private void txt_TenChiPhi_Leave(object sender, EventArgs e)
        {
            error.Clear();
            if (txt_TenChiPhi.Text.Length != 0)
            {
                Regex rg = new Regex(@"^[^0-9]\w[^0-9]+$");
                Match m = rg.Match(txt_TenChiPhi.Text);

                if (!m.Success)
                {
                    error.SetError(txt_TenChiPhi, "Tên chi phí chỉ được nhập chữ !!!");
                    txt_TenChiPhi.Focus();
                }
            }
        }
        bool loi = false;
        private void gridview_QuanLiChiPhi_CellValidating(object sender, CellValidatingEventArgs e)
        {
            var column = e.Column as GridViewDataColumn;
            if (e.Row is GridViewDataRowInfo && column != null && column.FieldName == "diengiai")
            {
                try
                {
                    var value = (string)e.Value;
                    var row = (GridViewDataRowInfo)e.Row;
                    if (string.IsNullOrEmpty(value))
                    {
                        loi = true;
                        row.ErrorText = "Diễn giải không được trống !!!";
                    }
                    else
                    {
                        loi = false;
                        row.ErrorText = string.Empty;
                    }
                }
                catch (Exception ex)
                {
                }
            }
            if (e.Row is GridViewDataRowInfo && column != null && column.FieldName == "sotien")
            {
                try
                {
                    var value = (string)e.Value;
                    var row = (GridViewDataRowInfo)e.Row;
                    if (string.IsNullOrEmpty(value))
                    {
                        loi = true;
                        row.ErrorText = "Số tiền không được trống !!!";
                    }
                    else if (string.IsNullOrEmpty(value) == false)
                    {
                        Regex rgx = new Regex(@"^\d+$");
                        Match m = rgx.Match(value);
                        if (!m.Success)
                        {
                            loi = true;
                            row.ErrorText = "Số tiền chỉ được nhập số !!!";
                        }
                        else
                        {
                            loi = false;
                            row.ErrorText = string.Empty;
                        }
                    }
                }
                catch (Exception ex)
                {
                }
                
            }
            if (e.Row is GridViewDataRowInfo && column != null && column.FieldName == "tencp")
            {
                var value = (string)e.Value;
                var row = (GridViewDataRowInfo)e.Row;
                if (string.IsNullOrEmpty(value))
                {
                    loi = true;
                    row.ErrorText = "Tên chi phí không được trống !!!";
                }
                else if(string.IsNullOrEmpty(value)==false)
                {
                    Regex rg = new Regex(@"^[^0-9]\w[^0-9]+$");
                    Match m = rg.Match(value);
                    if (!m.Success)
                    {
                        loi = true;
                        row.ErrorText = "Tên chi phí chỉ được nhập chữ !!!";
                    }
                    else
                    {
                        loi = false;
                        row.ErrorText = string.Empty;
                    }
                }
                
            }
            if (e.Row is GridViewDataRowInfo && column != null && column.FieldName == "ngaychi")
            {
                try
                {
                    var value = (string)e.Value;
                    var row = (GridViewDataRowInfo)e.Row;
                    if (string.IsNullOrEmpty(value))
                    {
                        loi = true;
                        row.ErrorText = "Ngày chi không được trống !!!";
                    }
                    else if (string.IsNullOrEmpty(value) == false)
                    {
                        Regex rg = new Regex(@"^\d+$");
                        Match m = rg.Match(value);
                        if (!m.Success)
                        {
                            loi = true;
                            row.ErrorText = "Ngày chi không được nhập chữ !!!";
                        }
                        else
                        {
                            loi = false;
                            row.ErrorText = string.Empty;
                        }
                    }
                }
                catch (Exception ex)
                {
                }

            }
        }
        bool kiemtraloi = false;
        private void txt_Mask_SoTien_Leave(object sender, EventArgs e)
        {
            error.Clear();
            decimal sotien_tam = decimal.Parse(txt_Mask_SoTien.Value.ToString());
            if (sotien_tam > 9000000000)
            {
                kiemtraloi = true;
                error.SetError(txt_Mask_SoTien, "Số tiền không quá 9.000.000.000");
                txt_Mask_SoTien.Focus();
            }
        }
    }
}
